package com.sale.system.service;

import com.sale.common.mybatis.core.page.PageQuery;
import com.sale.common.mybatis.core.page.TableDataInfo;
import com.sale.system.api.model.MaterialUnitDto;
import com.sale.system.domain.dto.SysAuxiliaryUnitDateDetailDto;
import com.sale.system.domain.dto.SysTheDropDto;
import com.sale.system.domain.dto.SysUnitDto;
import com.sale.system.domain.vo.SysAuxiliaryUnitVo;

import java.util.List;
import java.util.Map;

/**
 * @Author: YSL
 * @Date: 2023/7/14 9:47
 * @Desc: 多计量单位 业务层
 */
public interface ISysAuxiliaryUnitService {

    /**
     * 新增多计量单位信息
     *
     * @param sysAuxiliaryUnitVo
     * @return
     */
    int insertMultiUnit(SysAuxiliaryUnitVo sysAuxiliaryUnitVo) throws Exception;

    /**
     * 修改多计量单位
     *
     * @param sysAuxiliaryUnitVo
     * @return
     */
    int updateMultiUnit(SysAuxiliaryUnitVo sysAuxiliaryUnitVo) throws Exception;

    /**
     * 查询单个多计量单位明细
     *
     * @param unitId
     * @return
     */
    SysAuxiliaryUnitDateDetailDto getMultiUnit(Long unitId);

    /**
     * 根据物料编码获取多计量单位
     */
    SysUnitDto getDateByCode(String materialCode);

    /**
     * 查询多计量单位列表
     *
     * @param sysAuxiliaryUnitVo
     * @param pageQuery
     * @return
     */
    TableDataInfo<SysAuxiliaryUnitDateDetailDto> selectMultiUnitDetailList(SysAuxiliaryUnitVo sysAuxiliaryUnitVo, PageQuery pageQuery);

    /**
     * 删除多计量单位
     *
     * @param unitId
     * @return
     */
    int deleteMultiUnit(Long unitId);

    /**
     * 多计量单位下拉
     *
     * @return
     */
    List<SysTheDropDto> selectMultiMeteringUnitList();

    /**
     * 根据物料编码获取物料单位（dubbo调用）
     */
    MaterialUnitDto getUnitDataByCode(Long id);

    /**
     * 根据id查询多计量单位
     * @param unitId
     * @return
     */
    SysAuxiliaryUnitDateDetailDto getMaterialUnitById(Long unitId) throws Exception;

    /**
     * 查询多单位换算
     * @return
     */
    MaterialUnitDto selectMaterialUnitList(Long id, Long unitQuantity);


    /**
     * 查询多单位换算(采购打印明细列表使用)
     * @return
     */
    MaterialUnitDto selectAtWillMaterialUnitList(Long id, Long unitQuantity);

    /***
     * 根据物料编码查询出单位信息和辅助单位
     * @param materialCode
     * @return
     */
    MaterialUnitDto getUnitByCode(String materialCode);

    /**
     * 根据物料编码查询出单位信息和辅助单位(返回map)
     */
    Map<String, MaterialUnitDto> getUnitByCodeToMap();

    /**
     * 返回多单位map集合(报表模块使用)
     */
    Map<Long, String> getUnitToMap();
}
